package com.demo.cms.service;

import java.util.List;

import com.demo.core.dao.base.support.ResultSearchResult;
import com.demo.core.dao.base.support.SearchArgumentSupport;
import com.demo.cms.model.ArticleComment;
import com.demo.core.service.base.BaseCoreService;

/**
 * 评论模型访问服务接口
 * 
 * @author ryuu.kk
 *
 */
public interface ArticleCommentService extends BaseCoreService<ArticleComment, Long> {

	/**
	 * 更新回复/反馈类型
	 * 更新： <pre>
	 * 		TITLE, 
	 * 		CONTENT, 
	 * 		SEND_NAME, 
	 * 		SEND_REGION</pre>
	 * @param id 主键ID
	 * @param articleComment ArticleComment
	 */
	void update(Long id, ArticleComment articleComment);
	
	/**
	 * 更新回复/反馈阶段
	 * @param id 主键ID
	 * @param checkStep 审核阶段
	 * @param isChecked 是否审核通过
	 */
	void update(Long id, int checkStep, Boolean isChecked);
	
	/**
	 * 通过Id查询评论对象
	 * @param id 外键ID
	 * @return ArticleComment 评论对象
	 */
	ArticleComment find(Long id);
	
	/**
	 * 通过站点ID查询站点内支持的所有评论
	 * @param siteId 站点外键ID
	 * @return List<ArticleComment> 评论对象列表
	 */
	List<ArticleComment> findList(Long siteId);
	
	/**
	 * 通过评论的外键ID查询该评论的所属评论
	 * @param id 评论外键ID
	 * @param depths 查询树的深度.当前ID的数据作为根向下查询.
	 * 			当前节点深度为0,它的下一结点的深度为1,依次类推
	 * @return ArticleComment 评论对象模型
	 */
	ArticleComment tree(Long id, int... depths);
	
	/**
	 * 通过评论的外键ID查询该评论的所有所属评论
	 * @param id 评论外键ID
	 * @return ArticleComment 评论对象模型
	 */
	ArticleComment tree(Long id);
	
	/**
	 * 通过站点外键ID分页查询站点所持有的评论列表
	 * @param siteId 站点外键ID
	 * @param firstResult 数据在第一条的位置
	 * @param maxResults 最大检索数据量
	 * @return ResultSearchResult<ArticleComment> 
	 */
	ResultSearchResult<ArticleComment> search(Long siteId, SearchArgumentSupport args);
	
	/**
	 * 通过站点外键ID分页查询站点所持有的评论列表
	 * @param siteId 站点外键ID
	 * @param type 反馈类型
	 * @param firstResult 数据在第一条的位置
	 * @param maxResults 最大检索数据量
	 * @return ResultSearchResult<ArticleComment> 
	 */
	ResultSearchResult<ArticleComment> search(Long siteId, String type, SearchArgumentSupport args);
	
	/**
	 * 通过站点外键ID分页查询文章所持有的评论列表
	 * @param siteId 站点主键ID
	 * @param articleId 文章主键ID
	 * @param type 反馈类型
	 * @param firstResult 数据在第一条的位置
	 * @param maxResults 最大检索数据量
	 * @return ResultSearchResult<ArticleComment> 
	 */
	ResultSearchResult<ArticleComment> search(Long siteId, Long articleId, String type, SearchArgumentSupport args);
}
